"""
配置管理模块
"""

import os
from typing import Any, Dict, Optional

import yaml

# 配置缓存
_config_cache = {}


def load_config(config_path: Optional[str] = None) -> Dict[str, Any]:
    """
    加载配置文件
    
    Args:
        config_path: 配置文件路径，如果为None则使用默认路径
        
    Returns:
        Dict: 配置字典
    """
    if config_path is None:
        config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)),
                                   "config", "settings.yml")

    # 如果配置已缓存，直接返回
    if config_path in _config_cache:
        return _config_cache[config_path]

    # 加载配置
    if os.path.exists(config_path):
        with open(config_path, "r", encoding="utf-8") as f:
            config = yaml.safe_load(f)
        _config_cache[config_path] = config
        return config

    # 如果配置文件不存在，返回空字典
    return {}


def get_setting(key_path: str, default: Any = None) -> Any:
    """
    获取配置项
    
    Args:
        key_path: 配置项路径，使用点号分隔，如 'log_config.type'
        default: 默认值，如果配置项不存在则返回此值
        
    Returns:
        Any: 配置项值
    """
    config = load_config()

    # 按点号分割路径
    keys = key_path.split('.')
    value = config

    # 逐级查找配置项
    for k in keys:
        if isinstance(value, dict) and k in value:
            value = value[k]
        else:
            return default

    return value


def reload_config() -> None:
    """
    重新加载配置（清除缓存）
    """
    _config_cache.clear()
